#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/shm.h>
#include <string.h>

#define SHM_KEY 0x1234
#define SHM_SIZE 4096

int main() {
    // 创建共享内存
    int shm_id = shmget(SHM_KEY, SHM_SIZE, IPC_CREAT | 0666);
    if (shm_id == -1) {
        perror("shmget failed");
        exit(EXIT_FAILURE);
    }

    // 附加共享内存
    char* shm_ptr = shmat(shm_id, NULL, 0);
    if (shm_ptr == (char*)-1) {
        perror("shmat failed");
        exit(EXIT_FAILURE);
    }

    printf("Write端已启动. 输入文本 (输入'quit'退出):\n");
    
    while(1) {
        // // 安全地获取输入
        // if (!fgets(shm_ptr, SHM_SIZE, stdin)) {
        //     perror("fgets failed");
        //     break;
        // }
        
        // // 安全地移除换行符
        // size_t len = strnlen(shm_ptr, SHM_SIZE);
        // if (len > 0 && shm_ptr[len-1] == '\n') {
        //     shm_ptr[len-1] = '\0';
        // }

        // // 检查退出条件
        // if (strncmp(shm_ptr, "quit", 5) == 0) {
        //     printf("退出中...\n");
        //     break;
        // }
        
        printf("[已发送] %s\n", shm_ptr);
    }

    // 解除共享内存附加
    if (shmdt(shm_ptr) == -1) {
        perror("shmdt failed");
        exit(EXIT_FAILURE);
    }

    // 延迟确保读端完成操作
    sleep(1);
    
    // 删除共享内存
    if (shmctl(shm_id, IPC_RMID, NULL) == -1) {
        perror("shmctl failed");
        exit(EXIT_FAILURE);
    }
    printf("共享内存已释放\n");
    
    return EXIT_SUCCESS;
}